﻿using AutoMapper;
using BasehInfoManager_IDal;
using BasehInfoManagerModel;
using BasehInfoManagerViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace BaseInfoManagerBll
{
    public class ModuleDbBll
    {
        private IModuleDbDal _moduleDbDal;
        private IMapper _mapper;
        public ModuleDbBll(IModuleDbDal moduleDbDal, IMapper mapper)
        {
            _moduleDbDal = moduleDbDal;
            _mapper = mapper;
        }

        //从数据获取所有模块
        public List<ModuleDb> GetModuleDbsAll()
        {
            return _moduleDbDal.GetModuleDbsAll();
        }

        //从数据库获取所有模块，并且初始化为层级模块
        public List<ModuleDbView> GetModuleDbViewsAll()
        {
            //实例化实体模型类
            List<ModuleDb> moduledbs = GetModuleDbsAll();
            //实例化显示model类
            List<ModuleDbView> viewsAll = new List<ModuleDbView>();
            //在实体类里条件查找模型是1 的就是父级
            List<ModuleDb> oneModel= moduledbs.Where(c => c.module_level == 1).ToList();

            foreach (var item in oneModel)
            {
                viewsAll.Add(InViewModel(item, moduledbs));
            }
            return viewsAll;
        }

        //对指定模块进行初始化喝递归初始化模块子列表，并返回初始化好的View

        public ModuleDbView InViewModel(ModuleDb db,List<ModuleDb> moduleDbs)
        {
            //利用automaper 对model之间的数据进行赋值
            ModuleDbView view = _mapper.Map<ModuleDbView>(db);
            //搜索指定模块的所有子列表

            List<ModuleDb> sonList = moduleDbs.Where(a => a.parent_code == view.module_code).ToList();



            if(sonList!=null&&sonList.Count>0)
            {
                view.SonModules = new List<ModuleDbView>();

                foreach (var item in sonList)
                {
                    //对子模块行子模块列表递归初始化
                    ModuleDbView son = InViewModel(item, moduleDbs);
                    view.SonModules.Add(son);
                }
            }
            return view;
        
        
        }



        //添加级别
        //首先查找
        public bool VModuleCode(string moduleCode)
        {
            if (_moduleDbDal.GetModuleDbByModuleCode(moduleCode) == null) return true;
            return false;
        }


        //添加
        public bool ModuleAdd(ModuleDb moduleDb)
        {
            return _moduleDbDal.ModuleAdd(moduleDb);
        }

        //详情
        public ModuleDbView GetModuleDbViewByCode(string moduleCode)
        {
            return _moduleDbDal.GetModuleDbViewByCode(moduleCode);
        }

        //查询
        public ModuleDbView GetModuleDbViewByCodeSonSql(string moduleCode)
        {
            return _moduleDbDal.GetModuleDbViewByCodeSonSql(moduleCode);
        }

        //修改
        public bool ModuleUpdate(ModuleDb moduleDb)
        {
            return _moduleDbDal.ModuleUpdate(moduleDb);
        }

    }
}
